package com.itheima.reflectlearn;

/*必须掌握
    怎么通过反射机制访问一个java对象的属性？
       给属性赋值set
       获取属性的值get

 */

import java.lang.reflect.Field;

public class ReflectTest07 {
    public static void main(String[] args)throws Exception{
        Class studentClass = Class.forName("com.itheima.reflectlearn.Student");
        Object obj  = studentClass.newInstance();//obj就是一个student对象。（底层调用无参构造方法)

        //获取no属性(根据属性的名称来获取Field)
        Field noField = studentClass.getDeclaredField("no");
        System.out.println(noField);

        //给obj对象的no属性赋值set
        noField.set(obj,100);

        //获取obj对象的no属性的值get
        Object no = noField.get(obj);
        System.out.println(no);

        //可以访问私有属性吗？
        Field nameField = studentClass.getDeclaredField("name");
        //nameField.set(obj,"小花");//异常Student with modifiers "private"

        nameField.setAccessible(true);//打破封装，允许访问私有属性（缺点：但是可能会给不法分子留下机会）
        nameField.set(obj,"小花");//打破封装后就可以访问private属性了

        System.out.println(nameField.get(obj));


    }



}
